import Server from '@/service/Server'
import store from '@/store'
import router from '@/router'
import axios from 'axios'
import errorCode from '@/utils/errorCode'

const request = axios.create({
    // 如果在执行异步请求的时候，如果baseUrl
    baseURL: Server.root,
    // timeout` 指定请求超时的毫秒数(0 表示无超时时间)
    timeout: 10000,
    // 默认就是会给请求头增加token 
    istoken: true
});


// 添加请求拦截器
request.interceptors.request.use(config => {
    // 在发送请求之前做些什么
    if (config.istoken) {
        const token = store.getters["user/getToken"];
        if (store.getters.token) {
            config.headers.token = ["pugbear ", token].join("");
            //config.headers["token"] = ["pugbear ", token].join("");
            //confoig["headers"]["token"] = ["pugbear ", token].join("");
        }
    }

    // 对象{id:1,name:'zhangsan'}转换成参数?id=1&name=zhangsan
    if (config.method === 'get' && config.params) {
        let url = config.url + '?' + tansParams(config.params);
        url = url.slice(0, -1);
        config.params = {};
        config.url = url;
    }

    // 防止表单重复提交的一个处理
    if (config.method === 'post' || config.method === 'put') {

    }


    return config;
}, function(error) {
    // 对请求错误做些什么
    console.log(error) // for debug
    return Promise.reject(error);
});



// 添加响应拦截器
request.interceptors.response.use((response) => {
    // 获取服务器的数据
    const res = response.data;
    const code = res.data.code || 200;
    // 获取错误信息
    const msg = errorCode[code] || res.data.msg || errorCode['default']

    if (code != 200) {
        // 这里是全局异常处理错误 ---- 成功的错误（服务状态status= 200 只不过数据返回的业务R的错误信息。）
        alert(msg);
        // 可以让我错误延续到页面去处理
        return Promise.reject(new Error(msg || 'Error'))
    } else {
        // 这个res在外部你可以少写一级。直接从R类开始
        return res;
    }
}, function(err) {
    // 这里是响应流的错误。
    if (err.data.code == 500) {
        alert("服务器脱离了地球表面");
        return;
    }
    if (err.data.code == 404) {
        alert("服务器脱离了地球表面");
        return;
    }
    if (err.data.code == 601) {
        alert("token已失效");
        //要重新登录
        router.push("/toLogin")
        return;
    }
    // 对响应错误做点什么
    return Promise.reject(error);
});



/*导出异步请求 */
export default request;